Como restaurar archivos modificados o recuperar archivos individuales de commits antiguos.
Si estamos trabajando en una rama y queremos descartar los cambios que hayamos hecho para volver a la situación inicial del commit podemos usar el comando restore de git.
En este caso tenemos modificaciones en el archivo adios.txt si queremos descartar las modificaciones y dejarlo como estaba en el último commit, lo haríamos con el siguiente comando:
> git restore adios.txt
Si tenemos varios archivos y queremos restaurarlos todos podemos usar el siguiente comando:
> git restore .
Si tenemos un archivo cuyos cambios están añadidos para el commit y queremos descartar dichos cambios tendremos que hacer un restore --staged
En este caso el comando sería:
git restore --staged adios.txt
Despues de ejecutar este comando el archivo volvería al estado de modificado pero no añadido para commit, en este estado ya podríamos realizar un restore normal.
Una manera alternativa de hacer esto es con el comando stash, al ejecutar este comando los archivos se restaurarían al estado del último commit, pero los cambios no se perderían, quedarían guardados en la pila del stash por si queremos recuperarlos mas tarde.
> git stash
Página Stash
Si queremos recuperar un solo archivo de un commit previo podemos hacerlo con el siguiente comando
> git checkout <commit_id> -- <archivo>
Ejemplo:
En este caso si queremos recuperar el archivo adios.txt del commit indicado lo haríamos tal que así:
git checkout 1342e49ce3290a43b4459f59e16cc0eb07b488eb -- adios.txt
Una vez ejecutado el comando el archivo volverá al estado exacto del commit indicado y se añadirá automáticamente para el próximo commit que hagamos
Si queremos que un archivo deje de ser parte del commit, pero no lo queremos eliminar de manera definitiva usariamos el siguiente comando:
> git rm --cache <archivo>
De esta manera el archivo seguirá existiendo pero dejará de estar asignado al repositorio, por lo tanto se mostrará como untracked file, como cualquier archivo que creemos y todavía no esté trackeado en el commit
Podemos usar dos comandos para borrar archivos git rm y rm, la diferencía es:
Si hemos trabajado en una rama o añadido algún archivo y queremos restaurarla por completo para dejarla exactamente en el estado inicial del commit lo hacemos con el siguiente comando:
> git stash -u
Es importante tener en cuenta que cuando hacemos un git pull o un git restore puede ser que la rama no esté exactamente en el estado del último commit, esto se puede deber a que hay archivos no trackeados que pueden influir en nuestra rama o archivos pendientes de commit que nos impide hacer un merge... si hacemos un git stash -u nos aseguramos que la rama queda exactamente como el último commit, ya que se encarga de restaurar tanto archivos trackeados como archivos no trackeados, (los archivos que había modificados se quedan guardados en la pila del stash por si queremos acceder a ellos mas tarde)
Git | restore | stash | rm